草庐IT

c++ - C++中static的含义

全部标签

c++ - C++标准中Should和Shall的确切含义

我一直在审查C++标准03版本。我开始对Should和Shall这两个词的含义感到困惑。标准中的Shall似乎表示强制要求(将有),而标准中的“应该”似乎表示可选要求(可能有).在英语中,Should表示期望,我误解了意思吗?不应该可以代替吗? 最佳答案 来自ISOTR10176,信息技术-编写编程语言标准的指南:3.7本文中使用的助动词3.7.1应:表明对编程语言标准或处理器的要求。3.7.2应该:对编程语言标准或处理器的建议。3.7.3可能:表示编程语言标准或处理器的可选特性。当本技术报告为支持特定可选功能的编程语言标准提供建议

c++ - 通过将前向声明替换为包含来更改代码的含义

GoogleC++StyleGuide声明Inextremecases,replacingan#includewithaforwarddeclarationcansilentlychangethemeaningofcode.你能帮我找一些例子吗? 最佳答案 这里有两种情况。其中一个是UB,另一个我认为是定义的行为变化(假设没有ODR或类似的违规行为:即,对foo的调用不会看到A的定义,但我不确定)namespaceN{structB{};structA;//:B{};}voidfoo(N::B*){std::cout{}>>void

c++ - static_cast<T>(...) 是编译时还是运行时?

是static_cast(...)在编译时或运行时完成的事情?我用谷歌搜索,但我得到了不同的答案。另外,dynamic_cast(...)显然是运行时——但是reinterpret_cast(...)呢?? 最佳答案 取决于您要转换的内容。例如。static_cast("Hello")最终调用std::string构造函数。在我的脑海中,我想不出任何reinterpret_cast的情况需要生成实际的机器指令。它只是告诉编译器:采用这种位模式,并相信它是这种类型的值。 关于c++-sta

c++ - BOOST_MPL_ASSERT 和 BOOST_STATIC_ASSERT 哪个更好?

我记得BOOST_MPL_ASSERT曾经是首选。这仍然是真的吗?有人知道为什么吗? 最佳答案 [回答我自己的问题]这取决于。这是一个苹果与橘子的比较。尽管相似,但这些宏不可互换。以下是每个工作原理的摘要:BOOST_STATIC_ASSERT(P)如果P!=true则生成编译错误.BOOST_MPL_ASSERT((P))如果P::type::value!=true则生成编译错误.尽管需要双括号,后一种形式特别有用,因为它可以生成更多信息性错误消息如果使用bool空元元函数来自Boost.MPL或TR1的作为谓词。这是一个示例程序

java - 编程中实例的含义是什么?

我很久没听懂了。有没有更容易理解的类似于“实例”的替代词?对于非程序员,您如何解释实例?实例就像普通人世界中的例子。如果我连它的意思都不懂,我就无法理解它是什么。 最佳答案 “实例”最好理解为它与编程中的“类”有关。“类”用于定义类别事物的属性和行为。例如。“汽车”类可能规定所有汽车都由它们的品牌、型号、年份和里程来定义。但是,在您创建汽车的“实例”之前,您无法提供有关特定汽车的详细信息(例如,1978年的雪佛兰Impala,上面有205,000英里,您的米奇叔叔驾驶过)。它是实例,它捕获关于一辆特定汽车的详细信息。

c++ - 单一与共享所有权的含义

正在阅读RAII的Wikipedia当刚刚看到Single和Shared所有权时。谷歌搜索,找不到任何有用的答案!有人可以为小学生解释这个概念吗? 最佳答案 本质上是unique_ptrvsshared_ptr。单一所有权,也称为唯一所有权,表示资源由单一类实例所有。一旦该实例不再存在,资源就会被释放(通过析构函数)。您发现的大多数RAII类都有唯一的所有权,例如std::vector。共享所有权意味着资源在多个类实例之间共享。只有在每个实例不再存在时才会释放资源,因此需要某种形式的引用计数或垃圾收集。您希望共享所有权的一个例子是一

c++ - 内联函数上的 static_assert 给出错误

考虑以下情况typedefvoid(*foo)();templatestructbar{static_assert(f!=nullptr,"f==null!");};voidbaz(){}inlinevoidbax(){}barok;barbad;//error:non-constantconditionforstaticassertionbaz和bax都被接受为模板参数。它表明两者都被接受为常数。然而,在static_assert他们似乎是不同的(至少在gcc4.9中)-bax不再是一个常数。我的假设是static_assert和模板评估常数相同。例如。任何一个错误都应该是'bax不

c++ - GCC 警告 : ignoring attributes on template argument (-Wignored-attributes) 的含义

我使用__m256作为模板类的参数(参见下面的代码)。在Ubuntu 16.10上使用g++版本6.2进行编译时(YakketyYak),它警告我模板参数上的属性被忽略:warning:ignoringattributesontemplateargument‘__m256{aka__vector(8)float}’[-Wignored-attributes]typedefvec_arrayvec256__m256类型似乎有一些与对齐有关的属性(也许还有一些其他属性?)。下面显示的这个原始容器类(并生成警告)的唯一目的是为这些特殊的Intel变量(__m256、__m128等处理堆上的内

c++ - TensorFlow 操作 ` IsExpensive()` 的含义?

有一个methodinOpKernel//Returnstrueiffthisopkernelisconsidered"expensive".The//runtimemayusethisflagtooptimizegraphexecutionforexample//to"inline"inexpensivekernels.virtualboolIsExpensive(){returnexpensive_;}似乎默认情况下GPUareconsideredasinexpensive上的所有操作而CPU、SYSL则被标记为昂贵。expensive的定义和作用有点难以理解。没有informat

c++ - #define/#undef 是具有特殊含义的标识符的未定义行为吗?

问题的答案Disablecheckforoverrideingcc建议在命令行上使用-Doverride=来禁用错误使用override的错误。,这实际上与添加:#defineoverride到源文件。我最初的react是这似乎是未定义的行为,因为我们正在重新定义一个关键字,但查看草案C++11标准部分2.12Keywords[lex.key]我很惊讶override和final都不是关键字。它们在上一节2.11[lex.name]中有介绍,其中说它们是具有特殊含义的标识符:TheidentifiersinTable3haveaspecialmeaningwhenappearingin